1-4 ニューラルネットワークの学習『ゼロから作るDeep Learning』
4.1
データからパラメータの値をきめることについての章
ニューラルネットワークはデータからパラメータの学習可能なのがすばらしい
手作業だとめっちゃ大変なので
コンピュータビジョンでは特徴量を使って画像データをベクトルに変換し、識別器で学習させる
ニューラルネットワークは変換せず、そのまま学習する
このことから end-to-end machine learning とも呼ばれる
入力データから本質的なデータを的確に抽出できるように設計された変換器
像情報をコンピュータに取り入れて処理し、必要な画像情報を取り出す技術です。 例えば、ロボットの目にあたる装置(ロボットビジョン)を作る研究分野では、実存する情報をコンピュータが取得するすべての過程を指します。
まだ見ぬデータ(訓練データに含まれないデータ)に対しての能力
あるデータセットにはうまく対応できても、他のデータセットには対応できない
あるデータセットだけに過度に対応した状態
4.2
ニューラルネットワークの性能の“悪さ”を示す指標
$ E = \frac{1}{2} \sum_{k} (y_k - t_k)^2
$ y_kはニューラルネットワークの出力、$ t_k教師データ、kはデータの次元数
教師データの各要素の差の2乗を計算し、その総和を求める
code:hoge.py
def sum_squared_error(y,t):
return0.5*np.sum((y-t)**2)
sum_squared_error(np.array(y),np.array(t))
上記の例では正解である、y[2]が最大なので計算するとわりと数値が小さくなるはず
数値が小さいほどモデルの悪さが低い
正解ラベルを1とし、それ以外は0であらわす表記法
$ E = -\sum_{k} t_k \, log \, y_k
logは底が$ eの自然対数$ \log{_e}を表す 自然対数ってなに?cak.icon
$ y_kはニューラルネットワークの出力
$ t_kはone-hot表現で正解ラベルとなるインデックスのみが1、その他は0
なので、正解のみしか計算されない
例として、正解の出力が0.6だった場合、$ -\log0.6=0.51になる
損失関数は訓練データ1つに対してひとつ求められる
n個の訓練データがある場合すべての和を求めnで割ることによって平均の損失関数を求められる
訓練データが大量にある場合、すべての損失関数を計算するのはコストがかかりすぎる
一部を選び、そのデータを全体の近似として利用する
小さな塊(ミニバッチ)を抜き出して学習を行うので、ミニバッチ学習と呼ばれる 4.3
$ \frac{df(x)}{dx} = \lim_{h \to 0} \frac{f(x + h) - f(x)}{h}
xに対する$ f(x)の変化の度合いを表す
xの小さな変化により、関数$ f(x)の値がどれだけ変化するかを意味する
小さな変化であるhを限りなく0に近づける、ということを$ \lim_{h \to 0}で表す
複数の変数からなる関数の微分
$ f(x_0,x_1)=x^2_0+x^2_1
code:hoge.py
def function_2(x):
$ x^2_0ってなんだ?って思ったけど$ x_0の2乗なだけだったcak.icon
これはグラフに描画すると3次元のグラフになる
変数が$ x_0,x_1の2こあるから
2個ある変数のどっちに対する微分か?を表す必要がある
数式では$ \frac{\partial f}{\partial x_0}のように書く(これは$ x_0に対するもの)
4.4
hr.icon
目次
4章 ニューラルネットワークの学習
4.1 データから学習する
4.1.1 データ駆動
4.1.2 訓練データとテストデータ
4.2 損失関数
4.2.1 2乗和誤差
4.2.2 交差エントロピー誤差
4.2.3 ミニバッチ学習
4.2.4 [バッチ対応版]交差エントロピー誤差の実装
4.2.5 なぜ損失関数を設定するのか?
4.3 数値微分
4.3.2 数値微分の例
4.3.3 偏微分
4.4.1 勾配法
4.4.2 ニューラルネットワークに対する勾配
4.5 学習アルゴリズムの実装
4.5.1 2層ニューラルネットワークのクラス
4.5.2 ミニバッチ学習の実装
4.5.3 テストデータで評価
4.6 まとめ